<?php
declare (strict_types = 1);

namespace app\admin\middleware;

use app\common\model\Admin as AdminModel;
use app\common\model\Config as ConfigModel;
use think\facade\View;

class Auth
{
    // 调用跳转扩展
    use \liliuwei\think\Jump;

    /**
     * 处理请求
     *
     * @param \think\Request $request
     * @param \Closure       $next
     * @return Response
     */
    public function handle($request, \Closure $next)
    {
        // 获取cookie的LoginAdmin
        $LoginAdmin = !empty(cookie('LoginAdmin')) ? cookie('LoginAdmin') : '';

        // 如果cookie为空那么就
        if(empty($LoginAdmin))
        {
            $this->error('请先登录',(String)url('admin/index/login'));
            halt();
        }

        // 查询所有管理员
        $AdminList = AdminModel::column('id,salt');

        // 存放管理员id
        $adminid = 0;

        foreach($AdminList as $item)
        {
             $ID = md5($item['id'].$item['salt']);

             if($LoginAdmin == $ID)
             {
                 $adminid = $item['id'];
                 break;
             }
        }

        $admin = AdminModel::find($adminid);

        if(!$admin)
        {
            cookie('LoginAdmin',null);
            $this->error('非法登录');
            halt();
        }

        if($admin['state'] != 1)
        {
            cookie('LoginAdmin',null);
            $this->error('该管理员被禁用，请重新登录');
            halt();
        }

        $SystemList = ConfigModel::select();

        // 定义一个空数组
        $System = [];

        foreach ($SystemList as $key => $item) {
            $System[$item['key']] = $item['value'];
        }

        // 把登录的数据赋值给所有的视图
        View::assign([
            'LoginAdmin' => $admin,
            'System' => $System
        ]);

        // 给使用该中间件的控制器传递登录数据
        $request->LoginAdmin = $admin;

        // 返回request对象
        return $next($request);

    }
}
